سفارش تبلیغ
صبا ویژن

 

آشنایی با SSDها
آشنایی با SSDها

 






 
احتمالاً اولین بار پس از آنکه حافظه های فلش به اندازه کافی قابل اطمینان و ارزان شدند بوده که کسی به ذهنش رسیده است که تا جایی که می تواند تراشه های حافظه فلش را درون محفظه یک دیسک سخت قرار دهد، یک کنترل کننده به آن بیافزاید و در یک چشم به هم زدن از دست تمامی مشکلات مکانیکی درایوهای دیسک سخت خلاص شود.

نکته... یکنواخت سازی خرابی

سلول ها در یک درایو حالت جامد عمر کوتاهی دارند و پیش از آغاز فرسایشی که منجر به خرابی کامل آنها می شود، تنها می توانند حدودا 10000سیکل برنامه ریزی / پاک کردن داشته باشند. برخی از برنامه های خاص سیستم عامل، مکرراً داده های روی دیسک را به روز می کنند و اگر SSD واقعاً دوباره از همان صفحه استفاده می کرد یا به عبارت دیگر اگر یک LBA به طور دائم به یک صفحه SSD اختصاص می یافت، حافظه NAND آن صفحه (کل آن بلوک) به سرعت خراب می شد. بنابراین کنترل کننده های SSD از نوعی الگوریتم، یکنواخت سازی خرابی استفاده می کنند. این الگوریتم اول از همه پویایی اختصاص LBA به صفحات را تضمین می کند. یک LBA می تواند در این زمان به یک صفحه اشاره کند و در زمان بعد به صفحه ای دیگر، همان طورکه در متن مقاله اصلی دیدیم این کار به سادگی و به کمک نوشتن بر روی صفحات جدید به جای به روزرسانی صفحات قبل، قابل انجام است.
کار دیگری که باید انجام شود این است که تضمین شود صفحات ایستا (صفحاتی که تنها یک بار نوشته و به دفعات خوانده می شوند، مانند فایل های اجرایی EXE) نیز به طور منظم تغییر مکان دهند. به این کار یکنواخت سازی خرابی ایستا می گویند. اگر این کار انجام نمی شد، SSD شامل صفحاتی می بود که هرگز پاک نمی شدند و صفحاتی نیز وجود داشتند که مرتباً پاک و بازنویسی می شدند. و درایو به صورت نامنظمی خراب می شد. با حرکت داده های ایستا وضعیت کلی خرابی بهبود می یابد. به خاطر داشته باشید که درایوهای USB از این نوع یکنواخت سازی خرابی استفاده نمی کنند و صفحات ایستای درون این درایوها برای بهبود وضعیت خرابی، جابه جا نمی شوند. این مسأله یکنواخت سازی خرابی پویا نامیده می شود.
اگر فقط تبلیغات را دیده باشید، طبیعی است که فکر کنید SSDها هیچ نقطه ضعفی ندارند. از درایوهای سخت متداول سریع تر هستند، در مقابل ضربه مقاوم تراند، فوق العاده کم صدا هستند، و به نظر می رسد تنها نکته منفی که می توان در موردشان به آن اشاره کرد، قیمت آنها است. در واقع مسایلی نیز وجود دارد که باید هنگام کار با SSDها از آنها آگاه باشید. به خصوص که موقع استفاده از این فناوری سیستم عامل مورد استفاده تان اهمیتی مضاعف پیدا می کند.
وقتی به طور روزمره با یک کامپیوتر شخصی کار می کنید به نحوه عملکرد آن در اجرای برنامه های خاصی که روی آن نصب اند، عادت می کنید. محدودیت برخی از این برنامه ها قدرت محاسباتی است، یعنی گلوگاه در اجرای این برنامه ها کاملاً به سرعت پردازنده ای که آنها را اجرا می کند وابسته است. یکی از بهترین مثال های چنین برنامه هایی تبدیل ویدیو از یک قالب به قالبی دیگر - مثلاً از DVD به MP4 برای اجرا بر روی iPod لمسی - است. هر کاری هم که بکنید، سرعت تبدیل کاملاً به سرعت پردازنده محدود است و زیرسیستم های دیسک به راحتی از پس عملیات خواندن و نوشتن برمی آیند.
اما محدودیت برخی دیگر از برنامه ها سرعت ورودی / خروجی (I/O) است. انتظار شما از سرعت اجرای برنامه به سرعت زیرسیستم های خواندن و نوشتن روی دیسک وابسته است. نمونه ای از اینگونه برنامه ها که شاید تصورش را نکنید، بوت کردن کامپیوتر است. وقتی کامپیوتر را بوت می کنید، مدیر بوت باید درایورها (راه اندازها) و برنامه های مختلفی را از روی دیسک بوت بر روی حافظه بارگذاری و اجرا کند. سیستم های عامل مدرن صدها برنامه، درایور و سرویس این چنینی دارند و برنامه هایی هم که سعی می کنند سرعت بوت را افزایش دهند، معمولاً فقط بر به حداقل رساندن چیزهایی که باید بار گذاری شوند، تمرکز می کنند.

تأخیرات دیسک

درایوهای دیسک استاندارد در مورد برنامه های محدود به سرعت I/O عملکرد خیلی خوبی ندارند. این وضعیت دو دلیل اساسی دارد. نخست اینکه هد باید بر روی مکان درستی از صفحه درست قرار گیرد و منتظر بماند تا سکتور درست بچرخد و زیر هد قرار گیرد. به این تأخیر، زمان جستجو می گویند. هد پس از قرار گرفتن در جای درست باید منتظر بماند تا سکتور درست ظاهر شود (تأخیر چرخشی) و بتواند داده های درخواستی را بخواند.
یک دلیل دیگر ممکن است این باشد که دیسک باید شروع به چرخش کند، زیرا بسیاری از سیستم ها به ویژه لپ تاپ هایی که با باتری کار می کنند، برای حفظ انرژی خود، پس از مدتی بلااستفاده ماندن دیسک، چرخش صفحه آن را متوقف می کنند.
تأخیر نخست در روزهای ابتدایی عرضه درایوهای دیسکی قابل توجه بود، زیرا نیم ثانیه یا بیشتر طول می کشید. اما با بهبود مداوم، اکنون زمان جستجو برای دستگاه های رومیزی و همراه استاندارد به 10میلی ثانیه کاهش یافته است.
تأخیر دوم مستقیماً با سرعت چرخش صفحه دیسک نسبت دارد. در طول این سال ها سرعت درایوها رشد کندی داشته اند و الان سرعت استاندارد دستگاه های قابل حمل 5400 و دستگاه های رومیزی 7200 دور در دقیقه است.
البته امروزه لپ تاپ های پیشرفته تر (البته به غیر از اپل) نیز به استفاده از درایوهای 7200 دور در دقیقه به عنوان استاندارد گرایش پیدا کرده اند. می توانید برای کامپیوترهای رومیزی خود درایوهای 10000 دور در دقیقه هم بخرید. برخی پیشنهاد می کنند از این درایوها برای بوت استفاده کنید. برای مقایسه، مثلاً iPodهای کلاسیک هاردهای 4200 دور در دقیقه داشتند (سایر iPodهای فعلی از حافظه فلش استفاده می کنند).
عامل دیگری که بر سرعت کلی درایوهای دیسکی مؤثر است، سرعت خواندن از روی صفحه دیسک و بارگذاری روی RAM می باشد. در این مورد علاوه بر تغییر رابط های قدیمی تر PATA به رابط های SATA، سرعت به چگالی داده هایی که بر روی صفحه دیسک قرار دارند نیز وابسته است. این چگالی با سرعت بسیار کمی هر سال اضافه می شود.
با تمام این صحبت ها، سرعت درایوهای سخت از لحاظ فیزیکی و مکانیکی محدود است. درست است که داده های بیشتری در فضای کمتر جای می گیرند ولی سرعت کلی درایو هنوز به سرعت چرخش صفحه آن وابسته است. سازندگان برای دستیابی به سرعت بیشتر به سراغ فناوری دیگری رفته اند: حافظه های فلش.

تولد SSD

احتمالاً اولین بار پس از آنکه حافظه های فلش به اندازه کافی قابل اطمینان و ارزان شدند بوده که کسی به ذهنش رسیده است که تا جایی که می تواند تراشه های حافظه فلش را درون محفظه یک دیسک سخت قرار دهد، یک کنترل کننده به آن بیافزاید و در یک چشم به هم زدن از دست تمامی مشکلات مکانیکی درایوهای دیسک سخت خلاص شود.
حافظه های فلش مورد استفاده در SSDها فلش های NAND نام دارند و بر دو گونه اند: سلول های تک سطحی (SLC) و سلول های چندسطحی (MLC). در SLC در هر سلول حافظه 1 بیت ذخیره می شود و در MLC معمولاً 2 بیت. هزینه ساخت MLC به طور کلی از SLC کمتر است (در هر سلول دو برابر اطلاعات جای می گیرد، در نتیجه می توان در همان تعداد سلول اطلاعات بیشتری ذخیره کرد). بیشتر SSDهای موجود در بازار نیز از همین نوع هستند. مقدار هر سلول با آزمایش آن با ولتاژهای مختلف بدست می آید. سلول SLC به ولتاژهای خاصی واکنش نشان می دهد.
برای یک سطح از این ولتاژها مقدار 0 و برای سطح دیگر مقدار 1 در نظر گرفته می شود. MLC به چهار سطح ولتاژ واکنش نشان می دهد که به ترتیب نمایان گر00، 10، 01 و 11 هستند. به خاطر داشته باشید که برای خواندن هرسلول MLC به تعداد چهار برابر آزمایش ولتاژ نیاز دارید و این مسأله زمان خواندن را افزایش می دهد. با این حال همین سرعت هم بسیار بیشتر از بالاترین سرعتی است که یک دیسک سخت می تواند به آن دست یابد.
مسأله اینجاست که برای مقداردهی به سلول ها نیز به دو ولتاژ مختلف احتیاج داریم. یک ولتاژ برنامه ریزی که مقدار سلول را صفر می کند و یک ولتاژ پاک کننده که مقدار آن را به 1 تغییر می دهد. این دو ولتاژ باید بالاتر از ولتاژهای خواندن باشند زیرا باید بتوانند الکترون ها را وادار کنند تا از یک گیت به گیت دیگر بروند. برای درک بهتر عملکرد گیت ها، سناریوی زیر را تصور کنید. فرض کنید دو ظرف آب داریم که با یک لوله به هم متصل اند.
لوله دارای یک شیر است و یکی از ظرف ها بالاتر از دیگری قرار دارد. ظرف بالاتر را از آب پر کنید. فرض سیستم بر این است که پر بودن ظرف بالایی به معنی ذخیره 1 است. حال اگر شیر را باز کنید (که اصلاً کار سختی نیست)، آب از ظرف بالایی به ظرف پایینی می ریزد (در اصطلاحات SLC این کار را برنامه ریزی سیستم می نامند). وضعیت جدید سیستم را صفر در نظر می گیریم. اما برای بازگرداندن مقدار سیستم به 1 باید چه کنیم: باید کاری کنیم که آب به سمت بالا به ظرف بالایی سرازیر شود و سپس شیر را ببندیم که کار بسیار مشکلی است (در اصطلاحات SLC به این کار پاک کردن می گویند).
به طور خلاصه وقتی صحبت از سلول های NADA است. برنامه ریزی ساده و پاک کردن مشکل است.

خرابی ماده حالت جامد

علاوه بر این وادار کردن الکترون ها به رفت و آمد مکرر در ماده زیرآیند، باعث خرابی ماده می شود. در نهایت این خرابی به حدی می رسد که الکترون ها تقریباً به هر جایی که خودشان بخواهند رفت و آمد می کنند، سلول خراب می شود و دیگر نمی تواند یک وضعیت تعریف شده را ذخیره نماید. این فرآیند برای 100000SLC سیکل برنامه ریزی/پاک کردن طول می کشد، اما باز هم یادآوری می کنیم که SLC فقط دو وضعیت را ذخیره می کند. در مورد MLC که چهار وضعیت ممکن را ذخیره می کند این میزان به 10000 سیکل کاهش می یابد.
در واقعیت برنامه ریزی و پاک کردن سلول ها به طور منفرد انجام نمی شود. برنامه ریزی و خواندن معمولاً در صفحات 4 کیلوبایتی و پاک کردن در بلوک های 128 صفحه ای (512 کیلوبایتی) صورت می گیرد. این شیوه کار مدار و کنترل کننده را بسیار آسان می کند. عمل خواندن و نوشتن در سیستم های فایل نیز عموماً در بلوک های 4 کیلوبایتی انجام می گیرد. با علم به اینکه پاک کردن بیش ا زبرنامه ریزی به سلول صدمه می زند، در این شیوه تعداد دفعات پاک کردن نسبت به برنامه ریزی کمتر است.
اما هنوز هم نکته ای وجود دارد. اگر خوب فکر کنید متوجه خواهید شد که تفاوت در تعداد خواندن و نوشتن به این معنی است که یک صفحه تنها یک بار قابل نوشتن خواهد بود. نوشتن یک صفحه مقدار تعدادی از بیت های آن را صفر می کند و تنها راه برای بازگرداندن آنها به 1، پاک کردن آنها است.
بنابراین پیش از آنکه بتوانید یک صفحه را دوباره بنویسید باید کل بلوک حاوی آن صفحه را پاک کنید. در واقع اگر بخواهیم به طور مشخص تر بگوییم، باید تمامی صفحات فعال درون بلوک (به غیر صفحه ای که می خواهید آن را بازنویسی کنید) را بخوانید، کل بلوک را پاک کنید و دوباره تمامی آنها در جای خودشان بنویسید و سپس نسخه جدید صفحه ای را که می خواستید بازنویسی کنید، بنویسید.
همانطور که می توانید تصور کنید، این فرآیند خواندن - پاک کردن - نوشتن از نوشتن اولیه یک صفحه بسیار زمان برتر است و از این لحاظ با دیسک های سخت متداول قابل مقایسه است.

بازنویسی داده ها

پس زمان بازنویسی چه اتفاقی می افتد؟ پاسخ این است که صفحه اصلی برچسب نامعتبر می خورد و نسخه جدید در صفحه دیگری ذخیره می شود (و از به روزرسانی تمامی پیوندها به محل داده نیز اطمینان حاصل می شود).
برای به روزرسانی مجدد نیز، صفحه برچسب نامعتبر می خورد و داده جدید در یک صفحه خالی نوشته می شود. می توانید اینگونه در نظر بگیرید که صفحه سه وضعیت دارد: خالی (پاک شده)، پر (حاوی داده) و نامعتبر (داده آن از رده خارج است و در دفعه بعدی که بلوک حاوی آن پاک می شود، خالی خواهد شد).
شاید فکر کنید این روش از لحاظ کارآیی ذخیره داده ها، مضحک است ولی از این جنبه به آن نگاه کنید که یک بلوک در طول عمر خود می تواند 10000 بار پاک شود. مشخص شده است که مزایای استفاده از فلش NAND (سرعت، استحکام و بی صدایی) بر محدودیت 10000 بار نوشتن/ پاک کردن غلبه دارد. این مسأله را در سطح کل درایو نگاه کنید. بسیاری از مردم هرگز کل فضای درایوشان را مصرف نمی کنند و همیشه فضای خالی بسیاری بر روی آن وجود دارد. کنترل کننده می تواند با بهره گیری از این واقعیت، پیش از اقدام اساسی پاک کردن اولین بلوک، ابتدا تمامی فضاهای خالی را پر کند.
اتفاقاً همین مسأله دلیل سرعت بیشتر یک SSD نو در روزهای اول استفاده نسبت به SSDهایی است که برای مدتی مورد استفاده قرار گرفته اند. درایو جدید صفحات خالی بسیاری دارد و در نتیجه عمل نوشتن با سرعت کامل انجام می شود. پس از مدتی که تمامی صفحات مورد استفاده قرار گرفت، برخی از نوشتن ها از طریق سیکل خواندن - پاک کردن - نوشتن انجام می شود و سرعت کلی درایو به طور قابل توجهی کاهش می یابد.
اما نکته دیگری هم در مورد کل داستان SSDها وجود دارد. کنترل کننده درایو چیزی از سیستم فایل نمی داند و این کار وظیفه سیستم عامل است. سیستم عامل درایو را به صورت آرایه ای خطی از صفحات می بیند که با اندیس های صفحه یا LBA (آدرس بلوک منطقی) مشخص می شوند. سپس بر اساس این آرایه یک سیستم فایل سلسله مراتبی می سازد که در آن هر فایل دنباله ای از صفحات (مثلاً آدرس 17، سپس 42 و پس از آن به ترتیب 167 و 23) و هر پوشه آرایه ای از محتویات فایل ها است که هر یک شامل نام فایل و اولین LBA مربوطه هستند. کنترل کننده مسئول حفظ رابطه درست میان LBA و صفحه واقعی حافظه فلش در SSD است. به نظر فرآیند ساده ای است به جز اینکه سیستم عامل موقع پاک کردن، تنها یک برچسب پاک شده به صفحه می زند و به همین دلیل است که عمل پاک کردن برگشت پذیر می باشد، زیرا داده به لحاظ فیزیکی پاک نشده و هنوز روی درایو قرار دارد. اگر فایل فقط شامل 1 صفحه باشد برچسب نامعتبر نمی خورد و تا آنجا که به کنترل کننده مربوط می شود، صفحه هنوز مورد استفاده است.
مدتی بعد سیستم عامل می خواهد از صفحه ای که پاک کرده مجدداً استفاده کند. در این مرحله است که کنترل کننده کار معمول خود را انجام داده، به صفحه برچسب نامعتبر می زند و از یک صفحه خالی دیگر استفاده می کند. اینجاست که TRIM وارد می شود. سازندگان درایوهای حالت جامد، مشکل فایل های پاک شده و وجود صفحات پاک شده و وجود صفحات پاک شده را تشخیص داده اند.
آنها یک API به نام TRIM ساختند که به درایو می گوید فایلی پاک شده است و فلان و فلان LBA نامعتبراند و می توان آنها را مجدداً استفاده کرد. سپس درایو می تواند موقع عملیات پاک کردن به تمامی صفحات تحت تأثیر برچسب نامعتبر بزند و در بلوک های مورد نظر عملیات خواندن - پاک کردن - بازنویسی را انجام دهد.
البته این کار را نه هر مرتبه، بلکه تنها زمانی که تعداد صفحات نامعتبر یک بلوک از یک آستانه بحرانی گذشت، انجام خواهد داد.
نتیجه این کار طولانی تر شدن عملیات پاک کردن است ولی کارهای اضافه ای که اینجا انجام می شوند، به افزایش سرعت نوشتن که برای کاربر مهم تر است، می انجامند. در حال حاضر ویندوز 7 از TRIM پشتیبانی می کند اما Mac OS X تنها در مورد برخی از درایوهای خود اینکار را انجام می دهد.

جمع آوری زباله در زمان های بی کاری

گزینه دیگری که برخی از درایوهای SSD از آن پشتیانی می کنند، جمع آوری زباله در زمان های بی کاری است. این ویژگی به طور خلاصه به این صورت عمل می کند که وقتی درایو بی کار است یا فعالیت کمی دارد، بر روی بلوک های کثیف (بلوک هایی که صفحات نامعتبر آنها از حد معینی گذشته است). سیکل خواندن - پاک کردن - بازنویسی اجرا می شود. خلاصه اینکه در زمان های بی کاری درایو تمیز می شود تا برای زمانی که به صفحات خالی متعددی نیاز دارید، آماده باشد.
گفته می شود که MacBookهای شرکت اپل (به غیر از آنهایی که رسماً از TRIM پشتیبانی می کنند) به نوعی از این سیستم بهره می گیرند.
همان طور که دیدید SSDها به همان اندازه که سریع اند، جذاب هم هستند. قطعاً SSD بخرید ولی قبل از خرید مطمئن شوید که سیستم عامل تان ویندوز 7 است. در این صورت می توانید مطمئن باشید که بهترین استفاده را از درایوتان خواهید کرد.

نوشته های موازی

حافظه فلش NAND مورد استفاده درSSDها در واقع نسبتاً کند هستند. درایوهای USB هم از همین حافظه ها استفاده می کنند و همه می دانیم که می توانند تا چه حد کند و سنگین شوند. پس چگونه است که توان عملیاتی SSDها اینقدر بیشتر است.
پاسخ در موازی کاری است: درایوهای حالت جامد داده ها را به کانال های مختلفی تقسیم می کنند. سپس هر بار خواندن و نوشتن به طور همزمان در تمامی کانال ها صورت می گیرد. فرضاً اگر SSD چهار کنترل کننده کانال داشته باشد، کنترل کننده ها یک صفحه چهار کیلوبایتی را به طور هم زمان و در تکه های 1 کیلوبایتی می نویسند. در نتیجه توان عملیاتی چهار برابر می شود. توان عملیاتی با 8 کنترل کننده، 8 برابر حالت ابتدایی خواهد بود.

یکپارچه سازی

درایوهای دیسک سخت برای اینکه به حداکثر کارآیی ممکن برسند، به یکپارچه سازی نیاز دارند. فرض کنید داده ای را می خوانید که در سکتورهای مجاور هم ذخیره شده است. در این صورت هد باید تنها یک بار در جای خود قرار گیرد و سپس داده ها را به صورت یک جریان مستمر بخواند. اما اگر داده ها در صفحات متعددی پخش باشند، هد باید برای خواندن هر صفحه تغییر مکان دهد. بنابراین برای هر صفحه زمان جستجو و تأخیر چرخش نیز خواهیم داشت.
این مسأله در مورد SSDها وجود ندارد. خواندن از صفحات مختلف دقیقاً به یک میزان زمان می برد. و زمان جستجو و تأخیر چرخشی وجود ندارد. تکه تکه بودن فایل اهمیتی ندارد و نیازی به یکپارچه سازی نیست.
به علاوه در صورت انجام یکپارچه سازی با تعداد باورنکردنی از سیکل های خواندن - پاک کردن - بازنویسی مواجه خواهید شد. در حقیقت عمر درایو SSDتان را نیز کوتاه خواهید کرد. به همین دلیل است که ویندوز 7 در صورت شناخت درایوهای SSD به طور خودکار یکپارچه سازی را غیر فعال می کند.
منبع: نشریه بزرگراه رایانه، شماره ی 142

 






تاریخ : شنبه 91/3/6 | 6:43 عصر | نویسنده : مهندس سجاد شفیعی | نظرات ()
.: Weblog Themes By BlackSkin :.